var str1 = 'abcdefe'

// 1. charAt   返回指定索引的字符 、 或者通直接通过下标
console.log(str1.charAt(1)) // b
console.log(str1[1]) // b

// 2. charCodeAt codePointAt  返回指定索引元素的Unicode编码
console.log(str1[0], str1.charCodeAt(0)) // a 97
console.log(str1[0], str1.codePointAt(0)) // a 97

// 3. concat  拼接两个字符串，原字符串不变,返回新字符串,
console.log(str1.concat('g')) //abcdefeg

// 4. includes   判断字符串中是否包含某字符串，有返回true，否者false
console.log(str1.includes('e'))

// 5. indexOf  判断字符串中是否包含某字符串，有这返回索引，没有返回-1，参数可以是数字、字符串
console.log(str1.indexOf('e'))

// search  判断字符串中是否包含某字符串，有这返回索引，没有返回-1，参数可以数字、字符串、正则表达式
console.log(str1.search('b')) // 1
console.log(str1.search('g')) // -1
console.log(str1.search(/a/)) // 0

// 6. replace  把字符串中指定字符串替换掉，原字符串不改变
console.log(str1.replace('e', 'lll')) //替换一次
console.log(str1.replace(/e/g, 'lll')) //全局替换
console.log(
	str1.replace(/\./g, (val, index) => {
		// 回调方式
		console.log(val, index)
	})
)

// 8. split  字符串以某种方式分割数组，第二个参数可选，保存数组最大长度，原字符串不改变
console.log(str1.split('', 4))

// 9. substr  从索引n截取n个返回新字符串，第二参数不写，默认复制到最后，原字符串不改变
console.log(str1.substr(2, 3))

// 10. substring 从索引a,复制到索引b-1，返回新字符串，第二参数不写，默认复制到最后,原字符串不改变
console.log(str1, str1.substring(2, 4))

// 7. slice  把字符中指定索引复制返回新的字符串，左闭右开，原字符串不改变
console.log(str1, str1.slice(2, 4))

// 11. toLowerCase  字符串转小写，原字符串不改变
console.log(str1.toLowerCase())

// 12. toUpperCase  字符串转大写，原字符串不改变
console.log(str1.toUpperCase())

// 13. trim  删除字符串头尾空白，原字符串不改变
console.log('                     asfv                   '.trim())

// 14 repeat()：把字符串重复n次，返回新字符串
console.log('123'.repeat(2)) // 123123

// 15 startsWith()：是否存在字符串头部指定字符串
console.log('123'.startsWith('12')) // true

// 16 endsWith()：是否存在字符串尾部指定字符串
console.log('123'.endsWith('23')) // true

// 17 trimStart()：消除字符串头部空格，返回新字符串
console.log('   123   '.trimStart()) // '123   '

// 18  trimEnd()：消除字符串尾部空格，返回新字符串
console.log('   123   '.trimEnd()) // '   123'

// 19 replaceAll()：全局替换 replace(/a/g, 'b')的替代api
console.log('aabbcc'.replace(/a/g, 'A')) //'AAbbcc'
console.log('aabbcc'.replaceAll('a', 'A')) //'AAbbcc'

// 20 padStart、str.padEnd：es2018 使字符串起始、结尾填充至多长,返回新字符串
console.log('123'.padStart(10, 'a') === 'aaaaaaa123') //es2018 使字符串填充至多长,返回新字符串 例 '123'.padStart(10,'a') === 'aaaaaaa123`

// 21 link 快速创建a标签的字符串HTML
'123'.link('http://www.baidu.com') //  '<a href="http://www.baidu.com">123</a>'

// String.fromCharCode String.fromCodePoint 获取字符码对应内容 // 可接受一个指定的 Unicode 值，然后返回一个字符串。例如键盘事件的e.charCode会转为按下的键内容
document.addEventListener('keypress', e => {
	console.log(String.fromCharCode(e.charCode), e.keyCode, e.charCode)
	console.log(String.fromCodePoint(e.charCode), e.keyCode, e.charCode)
})

// matchAll()：返回一个迭代器，可以使用for…of…，数组新增的扩展符(…)或Array.from()实现功能
// 好像需要全局匹配，不然报错
console.log([...'abaca'.matchAll(/a/g)])

// Unicode表示法：大括号包含表示Unicode字符(\u{ 0xXX }或\u{ 0XXX })
// normalize()：把字符的不同表示方法统一为同样形式，返回新字符串(Unicode正规化)
